package fragments;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import org.json.JSONException;
import org.json.JSONObject;

import ws.JSONManager;
import ws.JsonParsers;
import android.app.ActionBar.OnNavigationListener;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.cachopoid.R;
import com.cachopoid.activity.MainActivity;
import com.cachopoid.utils.Constantes;
import com.cachopoid.utils.IndexAdapter;
import com.cachopoid.vo.EstablecimientoVO;


public class FragmentBusqueda extends Fragment implements OnNavigationListener {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";
    static Context contextGlobal = null;
    static MainActivity mainActivityGlobal = null;
    static JSONObject jsonResult = new JSONObject();
    static ArrayList<EstablecimientoVO> listaEstablecimientos= null;
    static ArrayList<EstablecimientoVO> listaEstabXConcejo= null;
    
    static String[] CONCEJOS = new String[]{};
    static String[] ESTABLECIMIENTOS = new String[]{};
    
    private ListView listBusquedasEstab;
    private ListView listBusquedasConcejos;
    private IndexAdapter indexAdapter;
    
    

    /**
     * Returns a new instance of this fragment for the given section
     * number.
     * @param context 
     */
    public static FragmentBusqueda newInstance(int sectionNumber,MainActivity mainActivity) {
    	FragmentBusqueda fragment = new FragmentBusqueda();
    	contextGlobal = mainActivity.getBaseContext();
    	mainActivityGlobal = mainActivity;
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public FragmentBusqueda() {
    	
    }

    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    	
    	 android.app.ActionBar actionBar = getActivity().getActionBar();
         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
         SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(contextGlobal,
         		R.array.valores_spinner_busqueda,
 				android.R.layout.simple_spinner_dropdown_item);
        
         actionBar.setListNavigationCallbacks(mSpinnerAdapter, this);
         
    	
        View rootView = inflater.inflate(R.layout.fragment_busquedas, container, false);
        TextView textView = (TextView) rootView.findViewById(R.id.TxtDetalle);
        Typeface font = Typeface.createFromAsset(container.getContext().getAssets(), "fuente_celta.ttf");
        textView.setTypeface(font);
        textView.setText("BUSQUEDAS");
        
        Resources res = getResources();
        
      /*  ESTABLECIMIENTOS = new String[]{"Casa Ferino","Casa Paquín","El Arroyo","El Cabaño","El Mancu","El Rincón Astur","El Saúco","Galastur","Gaucho Fierro",
        	       "La Chalana","La Manduca","Las Ruedas","Monte Naranco","Parrilla Los Corzos","Sidrería Muros","Sidrería Tropical","Sidrería Santa Bárbara","Tierra Astur"};*/
        
        listBusquedasEstab = (ListView) rootView.findViewById(R.id.listaEstablecimientos);
        listBusquedasConcejos = (ListView) rootView.findViewById(R.id.listaConcejos);
        listaEstablecimientos=new ArrayList<EstablecimientoVO>();
        CONCEJOS=res.getStringArray(R.array.concejos);
        
        
        
        /**
         * Función que se ejecuta al seleccion algún ESTABLECIMIENTO
         */
        listBusquedasEstab.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Object objeto = listBusquedasEstab.getItemAtPosition(position);
				
			}
		});
        
        /**
         * Función que se ejecuta al seleccion algún CONCEJO
         */
        listBusquedasConcejos.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Object objeto = listBusquedasConcejos.getItemAtPosition(position);
				String nombreConcejo=objeto.toString();
				String[] ESTABLECIMIENTOS_FILTRADOS=new String[]{"El Mancu","El Rincón Astur"};
				IndexAdapter indexAdapter = new IndexAdapter(contextGlobal, Arrays.asList(ESTABLECIMIENTOS_FILTRADOS));
 		    	listBusquedasEstab.setAdapter(indexAdapter);
 		    	listBusquedasConcejos.setVisibility(View.GONE);
 		    	listBusquedasEstab.setVisibility(View.VISIBLE);
				//Lanzamos el hilo filtrando los establecimientos por el concejo
				//threadCargaEstabXConcejo t = new threadCargaEstabXConcejo(mainActivityGlobal);
				//t.execute();
				//onNavigationItemSelected(1, id);
			}
		});
        
        
        return rootView;
    }
    



    
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((MainActivity) activity).onSectionAttached(
                getArguments().getInt(ARG_SECTION_NUMBER));
    }

	@Override
	public boolean onNavigationItemSelected(int itemPosition, long itemId) {
		listBusquedasEstab.setVisibility(View.GONE);
		listBusquedasConcejos.setVisibility(View.GONE);
		List<String> ESTAB=new ArrayList<String>();
		   switch (itemPosition) {
 		    case 0:
 		     	listBusquedasEstab.setVisibility(View.VISIBLE);
 		     //Carga todos los establecimientos
 		        threadCargaEstab t = new threadCargaEstab(mainActivityGlobal);
 				t.execute();
 				
 				for (Iterator iterator = listaEstablecimientos.iterator(); iterator.hasNext();) {
 					EstablecimientoVO establecimiento = (EstablecimientoVO) iterator.next();
 					ESTAB.addAll(Arrays.asList(establecimiento.getNombre()));
 					indexAdapter = new IndexAdapter(contextGlobal, ESTAB);
					
				}
 		    	listBusquedasEstab.setAdapter(indexAdapter);
 		    break;
 		    case 1:
 		    	listBusquedasConcejos.setVisibility(View.VISIBLE);
 		    	indexAdapter = new IndexAdapter(contextGlobal, Arrays.asList(CONCEJOS));
 		    	listBusquedasConcejos.setAdapter(indexAdapter);
 		    	
 		    break;
 		   
 		   default:
 		   break;
 	    }

     return true;
     }

	
	
	
    public class threadCargaEstabXConcejo extends AsyncTask <Void, Integer, Boolean> {
    	Context mContext;
    	Constantes cons = new Constantes();
    	String urlEstabXConcejo= cons.HOST_SERVICIOWEB+cons.SW_OBTENER_ESTABXCONCEJO;
//    	LayoutInflater l_Inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//		View convertView = l_Inflater.inflate(R.layout.activity_lista, null);
    	//ProgressBar pbarProgreso = (ProgressBar) mContext.findViewById(R.id.pbarProgresoRanking);
    

    	

		public threadCargaEstabXConcejo(MainActivity mainActivity) {
			mContext =mainActivity;// TODO Auto-generated constructor stub
		}

		@Override
    	protected Boolean doInBackground(Void... params) {
    		
    	      try{
    	    	  JSONManager jManager = new JSONManager();
    	    	  jsonResult = jManager.getJSONfromURL(urlEstabXConcejo,null);
    	     }catch(Exception e){
    	    	 
    	     }
    	      
    	     return true;
    	}
    	
    	@Override
    	protected void onProgressUpdate(Integer... values) {
 //   		 int progreso = values[0].intValue();
//    		 pbarProgreso.setProgress(progreso);
    	}
    	
    	@Override
    	protected void onPreExecute() {
//    		pbarProgreso.setMax(100);
//    		pbarProgreso.setProgress(0);
    	}
    	
    	@Override
    	protected void onPostExecute(Boolean result) {
    		if(result){
    			
    			try {
    				if(jsonResult != null){
    				//pbarProgreso.setVisibility(View.INVISIBLE);
    					listaEstabXConcejo=JsonParsers.parseJSONEstablecimientos(jsonResult.getJSONArray("establecimientos"));
    					ESTABLECIMIENTOS=(String[]) listaEstabXConcejo.toArray();
    				}
    				
    				
    			} catch (JSONException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			
    			Toast.makeText(contextGlobal, "Carga finalizada!", Toast.LENGTH_SHORT).show();
    			
    		}
    	}
    	
    	@Override
    	protected void onCancelled() {
    		Toast.makeText(contextGlobal, "Carga cancelada!", Toast.LENGTH_SHORT).show();
    	}
    }
    
    
    
    public class threadCargaEstab extends AsyncTask <Void, Integer, Boolean> {
    	Context mContext;
    	Constantes cons = new Constantes();
    	String urlEstab= cons.HOST_SERVICIOWEB+cons.SW_OBTENER_ESTABLECIMIENTOS;
//    	LayoutInflater l_Inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//		View convertView = l_Inflater.inflate(R.layout.activity_lista, null);
    	//ProgressBar pbarProgreso = (ProgressBar) mContext.findViewById(R.id.pbarProgresoRanking);
    

    	

		public threadCargaEstab(MainActivity mainActivity) {
			mContext =mainActivity;// TODO Auto-generated constructor stub
		}

		@Override
    	protected Boolean doInBackground(Void... params) {
    		
    	      try{
    	    	  JSONManager jManager = new JSONManager();
    	    	  jsonResult = jManager.getJSONfromURL(urlEstab,null);
    	     }catch(Exception e){
    	    	 
    	     }
    	      
    	     return true;
    	}
    	
    	@Override
    	protected void onProgressUpdate(Integer... values) {
 //   		 int progreso = values[0].intValue();
//    		 pbarProgreso.setProgress(progreso);
    	}
    	
    	@Override
    	protected void onPreExecute() {
//    		pbarProgreso.setMax(100);
//    		pbarProgreso.setProgress(0);
    	}
    	
    	@Override
    	protected void onPostExecute(Boolean result) {
    		if(result){
    			
    			try {
    				if(jsonResult != null){
    				//pbarProgreso.setVisibility(View.INVISIBLE);
    					List<String> ESTAB=new ArrayList<String>();
    					listaEstablecimientos=JsonParsers.parseJSONEstablecimientos(jsonResult.getJSONArray("establecimientos"));
    					
    	 				for (Iterator iterator = listaEstablecimientos.iterator(); iterator.hasNext();) {
    	 					EstablecimientoVO establecimiento = (EstablecimientoVO) iterator.next();
    	 					ESTAB.addAll(Arrays.asList(establecimiento.getNombre()));
    	 					indexAdapter = new IndexAdapter(contextGlobal, ESTAB);
    						
    					}
    	 		    	listBusquedasEstab.setAdapter(indexAdapter);
    				}
    				
    				
    			} catch (JSONException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			
    			Toast.makeText(contextGlobal, "Carga finalizada!", Toast.LENGTH_SHORT).show();
    			
    		}
    	}
    	
    	@Override
    	protected void onCancelled() {
    		Toast.makeText(contextGlobal, "Carga cancelada!", Toast.LENGTH_SHORT).show();
    	}
    }

	
	
}

